package genetica.mutacion;

import java.util.Random;

import genetica.cromosomas.Cromosoma;
import genetica.cromosomas.genes.Gen;

public class MutacionInversion extends AlgoritmoMutacion{

	public MutacionInversion(double pMutacion) {
		super(pMutacion);
	}

	@Override
	public void mutacion(Cromosoma original) {
		Random r = new Random();
		int nGenes = original.getGenes().size(); 
		if (r.nextDouble() < pMutacion) {
			int posIni = r.nextInt(nGenes);
			int posFin = r.nextInt(nGenes);
			if (posIni > posFin){
				int temp = posIni;
				posIni = posFin;
				posFin = temp;
			}
			for (;posIni < posFin;posIni++,posFin--){
//				if (posFin < 0){
//					System.out.println();
//				}
				Gen g = original.getGenes().get(posIni);
				original.getGenes().set(posIni,original.getGenes().get(posFin));
				original.getGenes().set(posFin,g);
			}
		}
	}
	@Override
	public String toString(){
		return "Mutación por inversión";
	}


}
